﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Text;

namespace PPFinance.Common
{
    public class StringZip
    {
        //字符串压缩

        public static string CompressString(string str)
        {

            const int iMaxCount = 9;//常量，表示多少进制，如十进制的 a9 表示9个a， 十六进制的af表示15个a。这里用十进制。

            StringBuilder stringBuilder = new StringBuilder();

            int countChar = 1;//计数器

            str = str.Trim() + " ";//为了防止在下面的循环中溢出，我在原来的字符串末尾加上了一个空格。

            for (int i = 0; i < str.Length - 1; i++)
            {

                if (str[i + 1] == str[i])//如果连续的字符相等
                {

                    countChar++;//计数器加一

                    if (countChar > iMaxCount)//如果计数器大于9，压入stringBuilder，比如，连续十个a，应该表示为：a9a1，而不是a10
                    {

                        stringBuilder.Append(str[i]);

                        stringBuilder.Append(iMaxCount.ToString());

                        countChar = 1;

                    }

                    continue;

                }

                else//如果不等，就将当前的字符和计数压入stringBuilder。
                {

                    stringBuilder.Append(str[i]);

                    stringBuilder.Append(countChar.ToString());

                    countChar = 1;

                }

            }

            return stringBuilder.ToString();

        }

        //字符串解压



        public static string ExtractString(string str)
        {

            StringBuilder stringBuilder = new StringBuilder();

            for (int i = 0; i < str.Length; i = i + 2)
            {

                int countChar = (int)str[i + 1] - (int)'0';//将记录字符字数的字符，如a9中的9转化为整型的9。

                for (int j = 0; j < countChar; j++)

                    stringBuilder.Append(str[i]);

            }

            return stringBuilder.ToString();

        }

        
       


    }
}
